package geppetto.main;


import geppetto.cat.alignments.AlignmentsSet;
import geppetto.cat.corpus.BilingualCorpus;
import geppetto.phraseHMM.alignmentInformationWriters.AlignmentInformationWriter;
import geppetto.phraseHMM.phraseExtraction.extractedphrase.ExtractedPhrasePair;
import geppetto.phraseHMM.phraseExtraction.extractedphrase.ExtractedPhrasePairWriter;
import geppetto.phraseHMM.phraseExtraction.extractedphrase.writer.ExtractionTableWriter;
import geppetto.phraseHMM.phraseExtraction.extractedphrase.writer.StdoutTableWriter;
import geppetto.phraseHMM.phraseExtraction.phraseAccepter.AbstractPhraseAccepter;
import geppetto.phraseHMM.phraseExtraction.phraseAccepter.AlwaysAccept;
import geppetto.phraseHMM.phraseExtraction.phraseAccepter.KohenPhraseAccept;
import geppetto.phraseHMM.phraseExtraction.sentencePair.PhrasePairCandidateExtractor;
import geppetto.phraseHMM.phraseExtraction.sentencePair.SizeBasedPhrasePairCandidateExtractor;
import geppetto.phraseScorer.AbstractPhraseScorer;
import geppetto.phraseScorer.One;
import geppetto.phraseTable.PhraseTable;
import geppetto.reordering.AbstractReorderingCalculator;
import geppetto.reordering.MSDReorderingCalculator;
import geppetto.reordering.ReorderingInfo;

import java.io.FileNotFoundException;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;



public class ControlPoints {
	
	AbstractPhraseAccepter phraseAccepter;
	AbstractPhraseScorer phraseScorer;
	PhrasePairCandidateExtractor phraseCandidateExtractor;
	AbstractReorderingCalculator reorderingCalc;
	ExtractedPhrasePairWriter outputWriter;
	AlignmentInformationWriter alignmentInfoWriter;
	
	public ControlPoints(AlignmentsSet al) {
		super();
		this.phraseAccepter = new KohenPhraseAccept(al);
		this.phraseScorer = new One();
		this.phraseCandidateExtractor = new SizeBasedPhrasePairCandidateExtractor(7,7);
		this.reorderingCalc = new MSDReorderingCalculator(al);
		this.outputWriter = new StdoutTableWriter();
	}

	public AbstractPhraseAccepter getPhraseAccepter() {
		return phraseAccepter;
	}

	public void setPhraseAccepter(AbstractPhraseAccepter phraseAccepter) {
		this.phraseAccepter = phraseAccepter;
	}

	public AbstractPhraseScorer getPhraseScorer() {
		return phraseScorer;
	}

	public void setPhraseScorer(AbstractPhraseScorer phraseScorer) {
		this.phraseScorer = phraseScorer;
	}

	public PhrasePairCandidateExtractor getPhraseCandidateExtractor() {
		return phraseCandidateExtractor;
	}

	public void setPhraseCandidateExtractor(
			PhrasePairCandidateExtractor phraseCandidateExtractor) {
		this.phraseCandidateExtractor = phraseCandidateExtractor;
	}

	public AbstractReorderingCalculator getReorderingCalc() {
		return reorderingCalc;
	}

	public void setReorderingCalc(AbstractReorderingCalculator reorderingCalc) {
		this.reorderingCalc = reorderingCalc;
	}

	public ExtractedPhrasePairWriter getOutputWriter() {
		return outputWriter;
	}

	public void setOutputWriter(ExtractedPhrasePairWriter outputWriter) {
		this.outputWriter = outputWriter;
	}

	public AlignmentInformationWriter getAlignmentInfoWriter() {
		return alignmentInfoWriter;
	}

	public void setAlignmentInfoWriter(
			AlignmentInformationWriter alignmentInfoWriter) {
		this.alignmentInfoWriter = alignmentInfoWriter;
	}
	
	
	
}
